package cn.com.bo.util.timer;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class ParserCron {
	
	public static int delay = 1;
	
	private static SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	/**
	 * 解析corn表达式，生成指定日期的时间序列
	 * 
	 * @param cronExpression
	 *            cron表达式
	 * @param cronDate
	 *            cron解析日期
	 * @param result
	 *            crom解析时间序列
	 * @return 解析成功失败
	 * */
	public static boolean Parser(String cronExpression, List<String> result, Date start, Date end) {
//		if (cronExpression == null || cronExpression.length() < 1) {
//			return false;
//		} else {
//			CronExpression exp = null;
//			// 初始化cron表达式解析器
//			try {
//				exp = new CronExpression(cronExpression);
//			} catch (ParseException e1) {
//				// TODO Auto-generated catch block
//				e1.printStackTrace();
//			}
//			// 生成时间序列
//			Date dd = start;
//			dd = exp.getNextValidTimeAfter(dd);
//			while ((dd.getTime() >= start.getTime())
//					&& (dd.getTime() <= end.getTime())) {
//				result.add(sdf.format(dd));
//				dd = exp.getNextValidTimeAfter(dd);
//			}
//			exp = null;
//		}
		return true;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 定义结束时间
		final Calendar c = Calendar.getInstance();
		c.add(Calendar.MINUTE, 1);
		Date dEnd = c.getTime();
		
		final List<String> result = new ArrayList<>();
		ParserCron.Parser("0/5 * * * * ?", result, new Date(), dEnd);
		for (String s : result) {
			System.out.println(s);
		}
		Thread thread = new Thread(){
			public void run(){
				while (true){
					if (result.size() < 12) {
						synchronized (result) {
							int start = result.size();
							Date end = null;
							try {
								end = sdf.parse(result.get(result.size() - 1));
							} catch (ParseException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							c.setTime(end);
							c.add(Calendar.MINUTE, 1);
							Date dEnd = c.getTime();
							ParserCron.Parser("0/5 * * * * ?", result, end, dEnd);
							
							System.out.println("新增加内容：");
							for (int i = start; i < result.size(); i++) {
								System.out.println(result.get(i));
							}
						}
					}
				}
			}
		};
		thread.setDaemon(true);
		thread.start();
		while (true){
			if (result.size() > 1 ){
				if(result.get(0).equals(sdf.format(new Date()))) {
					TimeUtil t = new TimeUtil();
//					t.addJob();
					result.remove(0);
				} else {
					
				} 
			}
			
		}
		
//		System.out.println(result.get(0));
//		result.remove(0);
//		System.out.println(result.get(0));
//		result.remove(0);
//		System.out.println(result.get(0));
	}

}
